{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>age</th>\n",
       "      <th>workclass</th>\n",
       "      <th>fnlwgt</th>\n",
       "      <th>education</th>\n",
       "      <th>education_num</th>\n",
       "      <th>marital-status</th>\n",
       "      <th>occupation</th>\n",
       "      <th>relationship</th>\n",
       "      <th>race</th>\n",
       "      <th>sex</th>\n",
       "      <th>capital-gain</th>\n",
       "      <th>capital-loss</th>\n",
       "      <th>hours-per-week</th>\n",
       "      <th>native-country</th>\n",
       "      <th>money</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>39</td>\n",
       "      <td>State-gov</td>\n",
       "      <td>77516</td>\n",
       "      <td>Bachelors</td>\n",
       "      <td>13</td>\n",
       "      <td>Never-married</td>\n",
       "      <td>Adm-clerical</td>\n",
       "      <td>Not-in-family</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>2174</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>50</td>\n",
       "      <td>Self-emp-not-inc</td>\n",
       "      <td>83311</td>\n",
       "      <td>Bachelors</td>\n",
       "      <td>13</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Exec-managerial</td>\n",
       "      <td>Husband</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>13</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>38</td>\n",
       "      <td>Private</td>\n",
       "      <td>215646</td>\n",
       "      <td>HS-grad</td>\n",
       "      <td>9</td>\n",
       "      <td>Divorced</td>\n",
       "      <td>Handlers-cleaners</td>\n",
       "      <td>Not-in-family</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>53</td>\n",
       "      <td>Private</td>\n",
       "      <td>234721</td>\n",
       "      <td>11th</td>\n",
       "      <td>7</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Handlers-cleaners</td>\n",
       "      <td>Husband</td>\n",
       "      <td>Black</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>28</td>\n",
       "      <td>Private</td>\n",
       "      <td>338409</td>\n",
       "      <td>Bachelors</td>\n",
       "      <td>13</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Prof-specialty</td>\n",
       "      <td>Wife</td>\n",
       "      <td>Black</td>\n",
       "      <td>Female</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>Cuba</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32556</th>\n",
       "      <td>27</td>\n",
       "      <td>Private</td>\n",
       "      <td>257302</td>\n",
       "      <td>Assoc-acdm</td>\n",
       "      <td>12</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Tech-support</td>\n",
       "      <td>Wife</td>\n",
       "      <td>White</td>\n",
       "      <td>Female</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>38</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32557</th>\n",
       "      <td>40</td>\n",
       "      <td>Private</td>\n",
       "      <td>154374</td>\n",
       "      <td>HS-grad</td>\n",
       "      <td>9</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Machine-op-inspct</td>\n",
       "      <td>Husband</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&gt;50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32558</th>\n",
       "      <td>58</td>\n",
       "      <td>Private</td>\n",
       "      <td>151910</td>\n",
       "      <td>HS-grad</td>\n",
       "      <td>9</td>\n",
       "      <td>Widowed</td>\n",
       "      <td>Adm-clerical</td>\n",
       "      <td>Unmarried</td>\n",
       "      <td>White</td>\n",
       "      <td>Female</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32559</th>\n",
       "      <td>22</td>\n",
       "      <td>Private</td>\n",
       "      <td>201490</td>\n",
       "      <td>HS-grad</td>\n",
       "      <td>9</td>\n",
       "      <td>Never-married</td>\n",
       "      <td>Adm-clerical</td>\n",
       "      <td>Own-child</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>20</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32560</th>\n",
       "      <td>52</td>\n",
       "      <td>Self-emp-inc</td>\n",
       "      <td>287927</td>\n",
       "      <td>HS-grad</td>\n",
       "      <td>9</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Exec-managerial</td>\n",
       "      <td>Wife</td>\n",
       "      <td>White</td>\n",
       "      <td>Female</td>\n",
       "      <td>15024</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&gt;50K</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>32561 rows × 15 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       age          workclass  fnlwgt    education  education_num  \\\n",
       "0       39          State-gov   77516    Bachelors             13   \n",
       "1       50   Self-emp-not-inc   83311    Bachelors             13   \n",
       "2       38            Private  215646      HS-grad              9   \n",
       "3       53            Private  234721         11th              7   \n",
       "4       28            Private  338409    Bachelors             13   \n",
       "...    ...                ...     ...          ...            ...   \n",
       "32556   27            Private  257302   Assoc-acdm             12   \n",
       "32557   40            Private  154374      HS-grad              9   \n",
       "32558   58            Private  151910      HS-grad              9   \n",
       "32559   22            Private  201490      HS-grad              9   \n",
       "32560   52       Self-emp-inc  287927      HS-grad              9   \n",
       "\n",
       "            marital-status          occupation    relationship    race  \\\n",
       "0            Never-married        Adm-clerical   Not-in-family   White   \n",
       "1       Married-civ-spouse     Exec-managerial         Husband   White   \n",
       "2                 Divorced   Handlers-cleaners   Not-in-family   White   \n",
       "3       Married-civ-spouse   Handlers-cleaners         Husband   Black   \n",
       "4       Married-civ-spouse      Prof-specialty            Wife   Black   \n",
       "...                    ...                 ...             ...     ...   \n",
       "32556   Married-civ-spouse        Tech-support            Wife   White   \n",
       "32557   Married-civ-spouse   Machine-op-inspct         Husband   White   \n",
       "32558              Widowed        Adm-clerical       Unmarried   White   \n",
       "32559        Never-married        Adm-clerical       Own-child   White   \n",
       "32560   Married-civ-spouse     Exec-managerial            Wife   White   \n",
       "\n",
       "           sex  capital-gain  capital-loss  hours-per-week  native-country  \\\n",
       "0         Male          2174             0              40   United-States   \n",
       "1         Male             0             0              13   United-States   \n",
       "2         Male             0             0              40   United-States   \n",
       "3         Male             0             0              40   United-States   \n",
       "4       Female             0             0              40            Cuba   \n",
       "...        ...           ...           ...             ...             ...   \n",
       "32556   Female             0             0              38   United-States   \n",
       "32557     Male             0             0              40   United-States   \n",
       "32558   Female             0             0              40   United-States   \n",
       "32559     Male             0             0              20   United-States   \n",
       "32560   Female         15024             0              40   United-States   \n",
       "\n",
       "        money  \n",
       "0       <=50K  \n",
       "1       <=50K  \n",
       "2       <=50K  \n",
       "3       <=50K  \n",
       "4       <=50K  \n",
       "...       ...  \n",
       "32556   <=50K  \n",
       "32557    >50K  \n",
       "32558   <=50K  \n",
       "32559   <=50K  \n",
       "32560    >50K  \n",
       "\n",
       "[32561 rows x 15 columns]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "adult_data = pd.read_csv(\"Data/adult.data\",header=None,names=[\"age\",\"workclass\",\"fnlwgt\",\"education\",\"education_num\",\"marital-status\",\n",
    "                                                  \"occupation\",\"relationship\",\"race\",\"sex\",\"capital-gain\",\"capital-loss\",\n",
    "                                                  \"hours-per-week\",\"native-country\",\"money\"\n",
    "                                                  ])\n",
    "adult_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    32561.000000\n",
       "mean        40.437456\n",
       "std         12.347429\n",
       "min          1.000000\n",
       "25%         40.000000\n",
       "50%         40.000000\n",
       "75%         45.000000\n",
       "max         99.000000\n",
       "Name: hours-per-week, dtype: float64"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "adult_data[\"hours-per-week\"].describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "152.45899505045418"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "adult_data[\"hours-per-week\"].var()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "40.0"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "adult_data[\"hours-per-week\"].median()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7faae10d68b0>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8GearUAAAgAElEQVR4nO3deXxU9b3/8dcnM5M9LAkBkS1hsRKQNYALoNWqWK1U0apdhFtb25/1V1vbe6+9vddWb/uz7dXWVr3uVqtel9pWuZVqsdi6AwFR2ZSwhzUkATLJTGb7/P6YmTAkk2SykZnJ5/l48GDmnDMz38MJ7/nmc77ne0RVMcYYk74y+roBxhhjepcFvTHGpDkLemOMSXMW9MYYk+Ys6I0xJs05+7oBLQ0ZMkRLSkr6uhnGGJNS1qxZc0hVi+OtS7qgLykpoaKioq+bYYwxKUVEdra1zko3xhiT5izojTEmzVnQG2NMmku6Gr0xpnf5/X6qqqrwer193RTTBdnZ2YwcORKXy5XwayzojelnqqqqKCgooKSkBBHp6+aYTlBVampqqKqqorS0NOHXWenGmH7G6/VSVFRkIZ+CRISioqJO/zZmQW9MP2Qhn7q6cuws6I0xJs1Z0JuU09AU4Iw7/sZbWw71dVNMF+3YsYPJkyf3dTOS0o9//GPuvPPOHn3PhIJeRBaIyMciUikit8RZP19E1opIQESuiFk+TUTeFZENIvKhiFzVk403/dP+o172HfGycntNXzfFJJFAIHBCPicYDJ6Qz+lJHQa9iDiA+4CLgDLgGhEpa7HZLmAJ8D8tljcC16rqJGABcLeIDOpuo03/1tAU/g+9o6axj1tiuiMYDPL1r3+dSZMmccEFF+DxeFi3bh2nn346U6ZM4bLLLqOurg6Ac845p3lqlEOHDhGdD+vxxx/n0ksv5dxzz+W8885j3759zJ8/n2nTpjF58mTefPPNVp/7+OOPs3DhQs455xwmTJjAbbfd1rzuqaeeYvbs2UybNo1vfOMbzaGen5/P9773PaZOncq7777bvP3q1au5/PLLAXjppZfIycnB5/Ph9XoZO3YsAFu3bmXBggXMnDmTefPmsXnzZgCqq6tZtGgRs2bNYtasWbz99tut2vrwww9z0UUX4fF4uvVvncjwytlApapuAxCRZ4GFwMboBqq6I7IuFPtCVf0k5vFeETkIFAOHu9Vq06+5I0G/s6ahj1uS+m773w1s3Hu0R9+z7OQB/OhzkzrcbsuWLTzzzDM8/PDDfOELX+APf/gDv/jFL7jnnns4++yzufXWW7ntttu4++67232ftWvX8uGHH1JYWMhdd93FhRdeyA9/+EOCwSCNjfE7A6tWrWL9+vXk5uYya9YsLr74YvLy8njuued4++23cblc3HDDDTz99NNce+21NDQ0MGfOHO66667j3mf69OmsW7cOgDfffJPJkyezevVqAoEAc+bMAeD666/ngQceYMKECaxcuZIbbriBFStWcNNNN/Hd736XuXPnsmvXLi688EI2bdrU/N733nsvy5cv58UXXyQrK6vDf8/2JBL0I4DdMc+rgDmd/SARmQ1kAls7+1pjYjU0hXtZ2w81oKo2giRFlZaWMm3aNABmzpzJ1q1bOXz4MGeffTYAixcv5sorr+zwfc4//3wKCwsBmDVrFl/96lfx+/18/vOfb37/eK8pKioC4PLLL+ett97C6XSyZs0aZs2aBYDH42Ho0KEAOBwOFi1a1Op9nE4n48aNY9OmTaxatYqbb76ZN954g2AwyLx583C73bzzzjvH7UdTUxMAr732Ghs3NveXOXr0KG63G4Df/e53jBo1ihdffLFTF0a15YRcMCUiw4EngcWqGoqz/nrgeoDRo0efiCaZFBYt3dR7Axxu9DM4L7OPW5S6Eul595bYXqrD4eDw4bZ/0Xc6nYRC4ehoOYY8Ly+v+fH8+fN54403ePnll1myZAk333wzBQUFzeWZRx55BGg9RFFEUFUWL17MHXfc0erzs7OzcTgcAFx44YUcOHCA8vJyHnnkEebPn89f/vIXXC4Xn/nMZ1iyZAnBYJD/+q//IhQKMWjQoOZef6xQKMR7771HdnZ2q3WnnXYa69at6/SFUW1J5GTsHmBUzPORkWUJEZEBwMvAD1X1vXjbqOpDqlququXFxXGnUzamWbR0A7DdyjdpY+DAgQwePLi5rv7kk0829+5LSkpYs2YNAC+88EKb77Fz506GDRvG17/+db72ta+xdu1aLrvsMtatW8e6desoLy8HYPny5dTW1uLxeHjxxRc566yzOO+883jhhRc4ePAgALW1tezc2Xrm31dffZV169Y1f2nMmzePu+++mzPOOIPi4mJqamr4+OOPmTx5MgMGDKC0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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import seaborn as sns\n",
    "sns.kdeplot(adult_data[\"hours-per-week\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([' <=50K', ' >50K'], dtype=object)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "adult_data[\"occupation\"].unique()\n",
    "adult_data[\"money\"].unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 如果大于40则代表工作时间长\n",
    "# adult_data[\"longtime_work\"] =  adult_data[\"hours-per-week\"] > 40\n",
    "\n",
    "# # 如果收入>50K代表收入高\n",
    "# adult_data[\"money\"] = adult_data[\"money\"] == ' >50K'\n",
    "# adult_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.feature_selection import VarianceThreshold\n",
    "X = adult_data[[\"education_num\"]]\n",
    "Y = adult_data[\"money\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7795829669332663"
      ]
     },
     "execution_count": 136,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.model_selection import cross_val_score\n",
    "dtc = DecisionTreeClassifier(random_state=14)\n",
    "score = cross_val_score(dtc, X, Y, scoring='accuracy')\n",
    "score.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.86055686e+02, 6.61868663e+00, 5.45408641e+07, 1.62371951e+05,\n",
       "       1.52454313e+02])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = adult_data[[\"age\",\"education_num\",\"capital-gain\",\"capital-loss\",\"hours-per-week\"]].values\n",
    "Y = adult_data[\"money\"]\n",
    "vt = VarianceThreshold(threshold=200)\n",
    "Xt = vt.fit_transform(X)\n",
    "vt.variances_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8311784058041543"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.model_selection import cross_val_score\n",
    "dtc = DecisionTreeClassifier(random_state=14)\n",
    "score = cross_val_score(dtc, Xt, Y, scoring='accuracy')\n",
    "score.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([8.60061182e+03, 2.40142178e+03, 8.21924671e+07, 1.37214589e+06,\n",
       "       6.47640900e+03])"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = adult_data[[\"age\",\"education_num\",\"capital-gain\",\"capital-loss\",\"hours-per-week\"]].values\n",
    "Y = adult_data[\"money\"].values\n",
    "\n",
    "from sklearn.feature_selection import SelectKBest\n",
    "# 导入卡方验证\n",
    "from sklearn.feature_selection import chi2\n",
    "\n",
    "\n",
    "# 选取前3个最好的节点\n",
    "transformer = SelectKBest(score_func=chi2,k=3)\n",
    "X_chi2 = transformer.fit_transform(X,Y)\n",
    "transformer.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 0., 0., 0., 0.])"
      ]
     },
     "execution_count": 124,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "transformer.pvalues_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True,  True, False, False,  True])"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "transformer.get_support()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[   39,  2174,     0],\n",
       "       [   50,     0,     0],\n",
       "       [   38,     0,     0],\n",
       "       ...,\n",
       "       [   58,     0,     0],\n",
       "       [   22,     0,     0],\n",
       "       [   52, 15024,     0]])"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_chi2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8291514400795839"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.model_selection import cross_val_score\n",
    "dtc = DecisionTreeClassifier(random_state=14)\n",
    "score = cross_val_score(dtc, X_chi2, Y, scoring='accuracy')\n",
    "score.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.stats import pearsonr\n",
    "def pearsonr_fit(x,y):\n",
    "    scores=[]\n",
    "    p_values = []\n",
    "    for column in range(X.shape[1]):\n",
    "        # cur_p表示的双侧p值\n",
    "        cur_score,cur_p = pearsonr(x[:,column],y)\n",
    "        scores.append(abs(cur_score))\n",
    "        p_values.append(cur_p)\n",
    "    return (np.array(scores),np.array(p_values))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.2340371 , 0.33515395, 0.22332882, 0.15052631, 0.22968907])"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "X = adult_data[[\"age\",\"education_num\",\"capital-gain\",\"capital-loss\",\"hours-per-week\"]].values\n",
    "Y = adult_data[\"money\"] == \" >50K\"\n",
    "transformer = SelectKBest(score_func=pearsonr_fit,k=3)\n",
    "X_pearsonr = transformer.fit_transform(X,Y)\n",
    "transformer.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7721507467016449"
      ]
     },
     "execution_count": 126,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.model_selection import cross_val_score\n",
    "dtc = DecisionTreeClassifier(random_state=14)\n",
    "score = cross_val_score(dtc, X_pearsonr, Y, scoring='accuracy')\n",
    "score.mean()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
